#!/usr/bin/env bash
# 严格模式：遇错即退、引用未定义变量时报错、管道错误上抛
set -euo pipefail

# 带时间戳的日志函数
log() { printf "[%s] %s\n" "$(date '+%H:%M:%S')" "$*"; }

# 命令存在性检测：缺哪个直接报错退出
need() {
  command -v "$1" >/dev/null 2>&1 || { echo "ERROR: 缺少命令 $1"; exit 1; }
}

# 取主版本号：从 v24.11.0 提取 24
major() { echo "$1" | sed -E 's/^v?([0-9]+).*/\1/'; }

log "开始环境预检..."

# 1) 基础命令是否存在
for c in git ssh node pnpm volta; do need "$c"; done
log "命令检测通过：git/ssh/node/pnpm/volta 存在"

# 2) 版本打印（注意使用 ${VAR}，并用 ASCII 括号）
NODE_V="$(node -v)"    # 形如 v24.11.0
PNPM_V="$(pnpm -v)"    # 形如 10.20.0
log "Node 版本: ${NODE_V} (期望 24.x LTS)"
log "pnpm 版本: ${PNPM_V} (期望 10.x)"

# 3) Node 主版本强校验（只要求 24.x；小版本不强制）
if [ "$(major "${NODE_V}")" -ne 24 ]; then
  echo "ERROR: Node 必须使用 24.x LTS。建议执行: volta install node@24.11.1"; exit 2;
fi

# 4) registry 连通性（会用当前 .npmrc 的 registry）
log "校验 registry 连通性..."
pnpm ping || { echo "ERROR: registry 连通性失败，请检查代理/网络"; exit 3; }

# 5) Gitee SSH 探活（未添加公钥时给出提示即可，不强制失败）
log "校验 Gitee SSH..."
if ssh -o BatchMode=yes -T git@gitee.com 2>&1 | grep -qi 'successfully'; then
  log "Gitee SSH: ok"
else
  echo "WARN: Gitee SSH 未通过(可能尚未添加公钥)。稍后可重试: ssh -T git@gitee.com"
fi

log "预检完成"
